자바 메시지 서비스
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
자바 메시지 서비스(JMS)는 느슨하게 결합된 분산 통신을 위한 자바 API로, 소프트웨어 구성 요소 간의 메시지 교환을 용이하게 한다. JMS는 포인트 투 포인트(큐)와 발행-구독(토픽) 모델을 지원하며, 이기종 플랫폼 통합, 시스템 병목 현상 감소, 확장성 향상 등의 장점을 제공한다. JMS는 메시지 본문, 헤더, 속성으로 구성된 메시지를 사용하며, 다양한 JMS 제공자를 통해 구현된다.
더 읽어볼만한 페이지
- 자바 사양 요청 - 자바 플랫폼, 마이크로 에디션
자바 ME는 임베디드 및 모바일 장치에서 자바 앱을 실행하는 플랫폼으로, 피처폰에서 주로 사용되었으며 다양한 프로파일과 에뮬레이터, 개발 도구를 제공하고 JSR을 통해 기능이 확장된다. - 자바 사양 요청 - 자바 커뮤니티 프로세스
자바 커뮤니티 프로세스는 자바 기술 명세의 개발 및 관리를 담당하는 조직으로, 자바 기술 표준화와 발전에 기여해왔으나 운영 방식에 대한 비판과 여러 논란에 직면해 있다. - 자바 플랫폼, 엔터프라이즈 에디션 - IBM 웹스피어
IBM 웹스피어는 IBM에서 출시한 기업용 소프트웨어 제품군 브랜드로, 다양한 애플리케이션 인프라, 비즈니스 프로세스 통합, 정보 통합 및 개발 도구를 포함한다. - 자바 플랫폼, 엔터프라이즈 에디션 - 자카르타 서버 페이지
자카르타 서버 페이지(JSP)는 웹 애플리케이션 개발에 사용되는 서버 측 스크립팅 기술로, 서블릿으로 변환되어 실행되고 HTML 형태로 결과를 반환하며, 지시어, 스크립틀릿, 표현식, 액션 등의 문법 요소, 표현 언어(EL), JSTL을 통해 동적인 웹 페이지를 구현하고 개발 편의성을 높였다.
자바 메시지 서비스 | |
---|---|
개요 | |
이름 | Jakarta Messaging |
이전 이름 | Java Message Service (JMS) |
유형 | 자바 API |
개발자 | Jakarta EE |
최신 릴리스 | Jakarta Messaging 3.0 |
최신 릴리스 날짜 | 2020년 5월 28일 |
상태 | 활성 |
라이선스 | Eclipse Public License |
설명 | |
설명 | 자바 기반 메시지 지향 미들웨어 API이다. |
역사 | |
JSR 번호 | 914 |
JSR 이름 | Java Message Service (JMS) API |
최초 릴리스 | 2001년 6월 |
추가 정보 | |
참고 자료 | JSR 914: Java Message Service (JMS) API Java Message Service Java Message Service Java Message Service |
2. 메시징의 일반적인 개념
메시징은 느슨하게 결합된 분산 통신의 한 형태이며, 여기서 '통신'은 소프트웨어 구성 요소 간의 메시지 교환을 의미한다. 메시지 지향 기술은 중개 구성 요소를 도입하여 ''긴밀하게 결합된'' 통신(TCP 네트워크 스트림 소켓, CORBA, RMI 등)을 완화한다. 이 접근 방식을 사용하면 소프트웨어 구성 요소가 서로 간접적으로 통신할 수 있으며, 메시지 발신자가 수신자에 대한 정확한 지식을 가질 필요가 없다.[3]
2. 1. 메시징의 장점
메시징은 이질적인 플랫폼 통합, 시스템 병목 현상 감소, 확장성 증가, 변화에 대한 더 빠른 대응 능력을 가지는 장점이 있다.[3] 메시징은 느슨하게 결합된 분산 통신 형태 중 하나이다. 여기서 "통신"은 소프트웨어 컴포넌트 간의 메시지 교환을 의미한다.메시지 지향 기술은 큐와 같은 중개자 역할을 하는 컴포넌트를 도입하여 TCP 네트워크 스트림 소켓, CORBA, RMI 등 긴밀하게 결합된 통신을 완화한다. 이 접근 방식을 통해 소프트웨어 컴포넌트가 서로 "간접적으로" 통신하게 된다. 이러한 이점에는 큐를 사용하여 통신할 때 메시지 송신자가 정확히 수신자를 알 필요가 없다는 점도 포함된다.
3. 모델
JMS API는 두 가지 주요 모델을 지원한다.
- 1 대 1: 포인트 투 포인트 (큐)
- 1 대 다: 게시-구독 모델 (토픽)
3. 1. 지점간(Point-to-Point) 모델
점대점 메시징 시스템에서 메시지는 수신 메시지 큐를 유지하는 개별 소비자에게 라우팅된다. 이 메시징 유형은 메시지 큐, 발신자 및 수신자의 개념을 기반으로 구축되었다. 각 메시지는 특정 큐를 대상으로 하며, 수신 클라이언트는 해당 메시지를 보관하기 위해 설정된 큐에서 메시지를 추출한다. 어떤 수의 생산자든지 큐로 메시지를 보낼 수 있지만, 각 메시지는 하나의 소비자에게 전달되고 소비됨이 보장된다. 큐는 메시지가 소비되거나 만료될 때까지 큐로 전송된 모든 메시지를 보존한다. 메시지를 소비하도록 등록된 소비자가 없으면 큐는 소비자가 등록할 때까지 메시지를 보관한다.자바 메시지 서비스 API는 두 가지 모델을 지원하는데 그중 하나가 1 대 1 방식의 포인트 투 포인트(큐)이다. 포인트 투 포인트(Point-to-Point) 방식에서 발신자는 특정 큐에 메시지를 전송하고, 수신자는 해당 큐에서 메시지를 읽어들인다. 여기서 발신자는 메시지의 수신처를 알고 있으며, 수신자의 큐에 직접 메시지를 전송한다. 이는 다음 특징을 갖는다.
- 오직 한 명의 소비자만이 메시지를 가져갈 수 있다.
- 생산자는 소비자가 메시지를 소비할 때 가동되지 않아도 된다. 또한, 소비자도 메시지가 전송될 때 가동되지 않아도 된다.
3. 2. 발행-구독(Publish-Subscribe) 모델
발행/구독 모델은 특정 메시지 "토픽"에 메시지를 발행하는 것을 지원한다. ''구독자''는 특정 메시지 토픽에 ''발행된'' 메시지를 수신하는 데 관심을 등록할 수 있다. 이 모델에서 발행자와 구독자는 서로에 대해 알지 못한다. 이에 대한 좋은 비유는 익명 게시판이다.발행/구독 모델의 특징은 다음과 같다.
- 0개 이상의 소비자가 메시지를 수신한다.
- 발행자와 구독자 간에는 시간 종속성이 있다. 발행자는 클라이언트가 구독할 메시지 토픽을 만들어야 한다. 구독자는 내구성 있는 구독을 설정하지 않는 한, 메시지를 수신하기 위해 지속적으로 활성 상태를 유지해야 한다. 이 경우, 구독자가 연결되지 않은 동안 발행된 메시지는 재연결될 때마다 재분배된다.
- 여러 구독자가 메시지를 받을 수 있다.
- 출판자와 구독자는 동시에 작동할 필요가 없다.
4. 구성 요소
JMS는 다음과 같은 구성 요소로 이루어져 있다.
; JMS 제공자
: 메시지 지향 미들웨어(MOM)를 위한 JMS 인터페이스 구현체이다. 제공자는 Java JMS 구현 또는 비 Java MOM 어댑터로 구현된다.
; JMS 클라이언트
: 메시지를 생성하고/하거나 수신하는 애플리케이션 또는 프로세스이다.
; JMS 프로듀서/게시자
: 메시지를 생성하고 전송하는 JMS 클라이언트이다.
; JMS 소비자/구독자
: 메시지를 수신하는 JMS 클라이언트이다.
; JMS 메시지
: JMS 클라이언트 간에 전송되는 데이터를 포함하는 객체이다.
; JMS 큐
: 전송되어 읽기를 기다리는 메시지를 포함하는 임시 저장 영역이다(단 하나의 소비자). 큐 이름에서 알 수 있듯이 메시지는 전송된 순서대로 전달된다. JMS 큐는 각 메시지가 한 번만 처리되도록 보장한다.
; JMS 토픽
: 여러 구독자에게 전달되는 메시지를 게시하기 위한 배포 메커니즘이다.
5. 메시지 구조
메시지는 본문, 헤더, 프로퍼티의 세 가지 요소로 구성된다.
메시지 본문에는 다음 다섯 가지 유형을 사용할 수 있다.
- 텍스트
- 맵(Map)
- 객체(Serializable)
- 스트림(Stream)
- 바이트 배열
프로퍼티 값으로는 String 또는 각종 기본형 값을 사용할 수 있다. 프로퍼티를 기반으로 메시지 선택기를 사용할 수 있다. 메시지 선택기의 구문은 SQL92 조건식 구문의 서브셋이다. LIKE 연산자나 중간 일치도 사용할 수 있다.
헤더에는 다양한 항목이 있다.
- JMSReplyTo 헤더에서는 회신을 원하는 큐 또는 토픽을 지정하여 메시지를 처리한 후 회신 메시지를 보내야 하는 대상을 지정할 수 있다.
- JMSCorrelationID 헤더로 어떤 메시지에 대한 회신인지 표현할 수 있다.
- JMSPriority 헤더로 전송의 우선순위를 지정할 수 있다.
- JMSDeliveryMode 헤더로 메시지를 저장소에 영속화할지 여부를 지정할 수 있다.
6. 연결 확립
JMS는 애플리케이션을 데이터 전송 계층으로부터 분리하는 방법을 제공한다. 자바 클래스는 프로바이더를 요청하는 JNDI를 사용하여, 다른 JMS 프로바이더와 통신을 수행할 수 있다.
처음에는 큐 또는 토픽에 접속하기 위해 커넥션 팩토리를 사용하고, 메시지를 전송하거나 발행한다. 수신자 측에서는 메시지를 수신하거나 구독한다.
7. 버전 역사
버전 | 발표일 | 자바 플랫폼 | 관련 문서 |
---|---|---|---|
JMS 2.0 | 2013년 5월 21일 | JSR 343[11][12] | |
JMS 2.0a | 2015년 3월 16일 | [13][14] | |
JMS 1.1 | 2002년 4월 12일[10] | Java EE 5 | JSR 914 |
JMS 1.0.2b | 2001년 8월 27일[9] | JSR 914 | |
JMS 1.0.2a | 1999년 12월 23일[8] | ||
JMS 1.0.2 | 1999년 12월 17일[7] | ||
JMS 1.0.1a | 1998년 10월 30일[5][6] | ||
JMS 1.0.1 | 1998년 10월 5일[4] | ||
JMS 1.0 | [4] |
JMS 2.0은 현재 자바 커뮤니티 프로세스 하에서 자바 사양 요청(JSR) 343으로 관리되고 있다.[15]
JMS 3.0은 자카르타 EE의 일부로 초기 개발 단계에 있다.[16]
8. 구현체(Provider Implementations)
JMS를 사용하려면 세션, 큐 및 토픽을 관리할 수 있는 JMS 제공자가 필요하다. Java EE 버전 1.4부터 JMS 제공자는 ''모든'' Java EE 애플리케이션 서버에 포함되어야 한다. 이는 해당 버전에서 처음 제공된 Java EE 커넥터 아키텍처의 메시지 유입 관리를 사용하여 구현할 수 있다.
다음은 일반적인 JMS 제공자 목록이다.
제공자 | 설명 |
---|---|
아마존 SQS의 [http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/jmsclient.html Java 메시징 라이브러리] | |
아파치 ActiveMQ Classic | |
아파치 ActiveMQ Artemis | |
아파치 큐피드 | AMQP 사용[18] |
IBM MQ | 이전의 MQSeries, 이후 WebSphere MQ |
IBM WebSphere Application Server의 서비스 통합 버스(SIBus) | [19] |
JBoss 메시징 및 호넷Q | JBoss |
JORAM | OW2 컨소시엄 |
오픈 메시지 큐 | 오라클 |
OpenJMS | OpenJMS 그룹 |
오라클 웹로직 서버 및 Oracle AQ | 오라클 |
PubSub+ | 솔레이스 |
RabbitMQ | 피보탈 소프트웨어 |
TIBCO 엔터프라이즈 메시지 서비스 | [20] |
아파치 액티브MQ | |
Apache Qpid영어 | AMQP 사용 |
EMS | TIBCO Software영어 |
FioranoMQ | 피오라노 소프트웨어 |
OpenJMS영어 | OpenJMS 그룹 |
JBoss Messaging영어, HornetQ영어 | 레드햇(JBoss) |
JORAM영어 | OW2 Consortium |
오픈MQ | 오라클 (썬 마이크로시스템즈) |
Oracle WebLogic Server영어, Oracle Advanced Queuing|label=Oracle AQ영어 | 오라클 |
래빗MQ | AMQP 사용 |
Solace JMS | Solace Systems영어 |
SonicMQ | Progress Software영어 |
StormMQ | AMQP 사용 |
SwiftMQ | |
웹스피어 애플리케이션 서버 | IBM |
웹스피어 MQ | IBM |
9. URI 스키마
RFC 6167은 자바 메시지 서비스(Java Message Service, JMS)를 위한 jms:
URI 스키마를 정의한다.
참조
[1]
간행물
Message-Oriented Middleware
http://www.edwardcur[...]
John Wiley and Sons
2004
[2]
웹사이트
JSR 914: Java Message Service (JMS) API
https://jcp.org/en/j[...]
2018-07-31
[3]
문서
Richards et al., pages 3–5.
[4]
웹사이트
Java Message Service
http://java.sun.com/[...]
Sun Microsystems
1998-10-05
[5]
웹사이트
Java Message Service Documentation
http://java.sun.com/[...]
Sun Microsystems
1998-10-30
[6]
웹사이트
Java Message Service Source - Version 1.0.1a
https://web.archive.[...]
Sun Microsystems
1998-10-29
[7]
웹사이트
Java Message Service
http://java.sun.com/[...]
Sun Microsystems
1999-11-09
[8]
웹사이트
Java Message Service Documentation
http://java.sun.com/[...]
Sun Microsystems
1999-12-23
[9]
웹사이트
Java Message Service
http://download.orac[...]
Sun Microsystems
2001-08-27
[10]
웹사이트
Java Message Service
https://github.com/j[...]
Sun Microsystems
2002-04-12
[11]
웹사이트
Java Message Service
https://github.com/j[...]
Oracle
2013-03-20
[12]
웹사이트
JMS 2.0 Final Release
https://javaee.githu[...]
2017-06-09
[13]
웹사이트
Java Message Service
https://github.com/j[...]
Oracle
2015-03-10
[14]
웹사이트
JMS 2.0 errata release (Rev a)
https://javaee.githu[...]
2017-07-05
[15]
웹사이트
JSR 343: Java Message Service 2.0
https://jcp.org/en/j[...]
[16]
웹사이트
JMS 3.0: Get Involved!
https://www.tomitrib[...]
2018-12-06
[17]
웹사이트
Java Message Service (JMS)
http://www.oracle.co[...]
[18]
웹사이트
Apache Qpid™: Open Source AMQP Messaging
http://qpid.apache.o[...]
[19]
웹사이트
Choosing a messaging system: WebSphere MQ vs. the WebSphere Application Server Service Integration Bus
http://www.ibm.com/d[...]
[20]
웹사이트
TIBCO Product Documentation - TIBCO Enterprise Message Service
https://docs.tibco.c[...]
[21]
간행물
Message-Oriented Middleware
http://www.mendeley.[...]
John Wiley and Sons
2004
[22]
웹사이트
JSR914 - JMS Spec
http://jcp.org/about[...]
[23]
웹사이트
Java Message Service (JMS)
http://www.oracle.co[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com